package cn.wolfcode.trip.base.service.impl;

import cn.wolfcode.trip.base.domain.TravelCommend;
import cn.wolfcode.trip.base.mapper.TravelCommendMapper;
import cn.wolfcode.trip.base.query.TravelCommendQueryObject;
import cn.wolfcode.trip.base.service.ITravelCommendService;
import cn.wolfcode.trip.base.util.DateUtil;
import com.github.pagehelper.PageHelper;
import com.github.pagehelper.PageInfo;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Date;
import java.util.HashMap;
import java.util.List;
import java.util.Map;

/**
 * @author by mycp
 * @Classname TravelCommendServcieImpl
 * @Description TODO
 * @Date 2018/11/6 22:05
 */
@Service
public class TravelCommendServiceImpl implements ITravelCommendService {
    @Autowired
    private TravelCommendMapper travelCommendMapper;
    @Override
    public PageInfo query(TravelCommendQueryObject qo) {
        // 根据推荐时间进行倒序查询
        PageHelper.startPage(qo.getCurrentPage(), qo.getPageSize(), qo.getOrderBy());
        List<TravelCommend> list = travelCommendMapper.queryForList(qo);
        return new PageInfo(list);
    }

    @Override
    public void saveOrUpdate(TravelCommend travelCommend) {
        // 专门处理推荐攻略游记
        if (TravelCommend.TYPE_STRATEGY.equals(travelCommend.getType())) {
            // 推荐攻略游记
            // 先删除掉之前推荐的攻略游记
            travelCommendMapper.deleteAllTravelCommend(TravelCommend.TYPE_STRATEGY);
            // 再保存新的攻略推荐游记
            travelCommendMapper.insert(travelCommend);
            // 结束方法:
            return;
        }



        // 判断是更新推荐游记 / 新增推荐游记
        if (travelCommend.getId() == null){
            // 新增推荐游记
            travelCommendMapper.insert(travelCommend);
        } else {
            // 更新推荐游记
            // 推荐游记中的字段游记 id 不需要进行更新
            travelCommendMapper.updateByPrimaryKey(travelCommend);
        }
    }

    @Override
    public List<TravelCommend> listCommends(Integer type) {
        // 确定推荐游记的时间范围
        // 起始时间
        Date beginDate = null;
        // 截止时间: 当前时间
        Date endDate = new Date();
        // 判断推荐游记的类型
        if (type.equals(TravelCommend.TYPE_WEEK)){
            // 周推荐类型
            // 起始时间是当前时间 减去 7 天
            beginDate = DateUtil.getSevenDaysAgo(endDate);

        } else if (type.equals(TravelCommend.TYPE_MONTH)){
            // 月推荐类型
            // 起始时间是当前时间 减去 一个月
            beginDate = DateUtil.getAMonthAgo(endDate);

        } else if (type.equals(TravelCommend.TYPE_STRATEGY)){
            // 攻略推荐类型
            // 只有起始时间, 没有截止时间

        } else {
            // 查询错误类型, 抛出异常
            throw new RuntimeException("请正确查询推荐游记");
        }
        return travelCommendMapper.selectCommendsByType(type, beginDate, endDate);
    }

    @Override
    public int[] selectForCount() {

        // 定义查询的类型
        Integer type = 1;
        // 查询的截止时间为当前时间
        Date endDate = new Date();
        // 查询每周推荐游记的起始时间
        Date weekAgoDate = DateUtil.getSevenDaysAgo(endDate);
        // 查询每月推荐游记的起始时间
        Date monthAgoDate = DateUtil.getAMonthAgo(endDate);
        // 查询周推荐游记
        int weekCommendCount = travelCommendMapper.queryForCount(weekAgoDate, endDate, type);
        // 查询周推荐游记
        type = 2;
        int monthCommendCount = travelCommendMapper.queryForCount(monthAgoDate, endDate, type);
        int[] counts = new int[2];
        counts[0] = weekCommendCount;
        counts[1] = monthCommendCount;
        return counts;
    }
}
